#pragma once

#include  "iostream"
#include  "vector"
#include  "stack"
#include  "unordered_map"
#include   "queue"

using namespace std;

/**
 *503. 下一个更大元素 II
中等
761
相关企业
给定一个循环数组 nums （ nums[nums.length - 1] 的下一个元素是 nums[0] ），返回 nums 中每个元素的 下一个更大元素 。

数字 x 的 下一个更大的元素 是按数组遍历顺序，这个数字之后的第一个比它更大的数，这意味着你应该循环地搜索它的下一个更大的数。如果不存在，则输出 -1 。



示例 1:

输入: nums = [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2；
数字 2 找不到下一个更大的数；
第二个 1 的下一个最大的数需要循环搜索，结果也是 2。
示例 2:

输入: nums = [1,2,3,4,3]
输出: [2,3,4,-1,4]
 * */

//1 2 1 1 2 1
vector<int> nextGreaterElements(vector<int> &nums) {
    int size = nums.size();
    for (int i = 0; i < size; i++) {
        nums.push_back(nums[i]);
    }
    ///////增倍
    vector<int> ret(nums.size(), -1);//返回
    stack<int> s;

    for (int i = 0; i < nums.size(); i++) {
        if (s.empty()) {
            s.push(i);
        } else {

            while (!s.empty() && nums[i] > nums[s.top()]) {
                ret[s.top()] = nums[i];
                s.pop();
            }
            s.push(i);

        }

    }

    ret.resize(size);
    return ret;

}